<?php

namespace App\Http\Controllers\Admin\ExportList;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use DB;
use App\Admin\SampleInfo;
use App\Http\Controllers\Admin\SampleInfoController;
use QrCode;


class BaoDingPuShiNeiMengController extends Controller
{

    /* 试验台账 导出Excel */
    public function export($request, $search) {
        @set_time_limit(0);
        ini_set('max_execution_time', 0);
        ini_set('memory_limit', "-1");
        
        $para = $request->get('params');
        $para = json_decode($para, true);
        $para['is_search'] = $search;
        $sampleCon = new SampleInfoController();
        $data = $sampleCon->listData($para);
        if(is_string($data)) {
            return $data;
        }
        $total = $data['iTotalDisplayRecords'];
        if($total === 0) {
            return '内容为空';
        }
        $data = $data['data'];
        $template_file = './storage/ExcelTemplate/检测台账.xls'; //考虑到兼容Linux，斜杠用“/”
        if(!file_exists($template_file)) {
            return '模板文件不存在';
        }
        $setting = DB::table('setting')->find('1');
        $report_num_pre = $setting->report_num_pre;                                                                                             //报告编号前缀
        $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($template_file);                                                               //读取模板文件
        $worksheet_sam_info = $spreadsheet->getSheet(0);                                                                                        //按索引获取表单，从 0 开始
        //          $domain             = $request->server('HTTP_HOST');  //域名
        $worksheet_sam_info->getCell("A1")->setValue($setting->name_rep.'--样品检测台账');
        $rowIndex_sam_info = 3;  //样品信息的行号
        $qr_code_path = [];
        foreach($data as $kk => $vv) {
            $worksheet_sam_info->getRowDimension($rowIndex_sam_info)->setRowHeight(75);
            $time = strtotime($vv->ctime);
            $month = date('m', $time);
            $day = date('d', $time);
            $worksheet_sam_info->getCell("A".$rowIndex_sam_info)->setValue($kk + 1); //序号
            $worksheet_sam_info->getCell("B".$rowIndex_sam_info)->setValue($vv->b_client_name); //送检单位
            $worksheet_sam_info->getCell("C".$rowIndex_sam_info)->setValue($vv->b_entrusted_company); //委托单位
            $worksheet_sam_info->getCell("D".$rowIndex_sam_info)->setValue($report_num_pre.$vv->b_batchNum); //报告编号
            $worksheet_sam_info->getCell("E".$rowIndex_sam_info)->setValue(substr($vv->bar_code, - 3, 3).'#'); //样品号
            $worksheet_sam_info->getCell("F".$rowIndex_sam_info)->setValue($vv->self_num); //样品自编号
            $worksheet_sam_info->getCell("G".$rowIndex_sam_info)->setValue($vv->c_tool_name); //样品名称
            $worksheet_sam_info->getCell("H".$rowIndex_sam_info)->setValue($vv->guige_xinghao); //规格型号
            $worksheet_sam_info->getCell("I".$rowIndex_sam_info)->setValue($vv->c_voltage); //额定电压（kV）
            $worksheet_sam_info->getCell("J".$rowIndex_sam_info)->setValue($vv->c_class); //分类
            $worksheet_sam_info->getCell("K".$rowIndex_sam_info)->setValue(1); //数量
            $worksheet_sam_info->getCell("L".$rowIndex_sam_info)->setValue($vv->c_unit); //单位
            $worksheet_sam_info->getCell("M".$rowIndex_sam_info)->setValue($vv->c_item_names); //检测项目
            $worksheet_sam_info->getCell("N".$rowIndex_sam_info)->setValue($vv->c_std_num); //依据标准
            $worksheet_sam_info->getCell("O".$rowIndex_sam_info)->setValue($vv->test_time); //试验日期
            $worksheet_sam_info->getCell("P".$rowIndex_sam_info)->setValue($vv->i_cycle.'年'); //检测周期
            $worksheet_sam_info->getCell("Q".$rowIndex_sam_info)->setValue($vv->next_time);  //有效期
            $worksheet_sam_info->getCell("R".$rowIndex_sam_info)->setValue(($vv->res === 1 ? '合格' : ($vv->res === 0 ? '未检测' : '不合格')));     //检测结果
            $worksheet_sam_info->getCell("S".$rowIndex_sam_info)->setValue($vv->g_name); //不合格项目
            /* ---------------- 不合格照片 -------------------- */
            if(isset($request->export_nonphoto)) {
                $vv->non_photo = '.'.$vv->non_photo;
                if(is_file($vv->non_photo)) {
                    $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
                    $drawing->setPath($vv->non_photo); //图片的路径
                    $worksheet_sam_info->getCell("T".$rowIndex_sam_info);
                    $drawing->setResizeProportional(false);                    //不保持宽高比
                    $drawing->setWidthAndHeight(1.3*$rowheight, $rowheight); //高度
                    $drawing->setOffsetX(5);
                    $drawing->setOffsetY(5);
                    $drawing->setCoordinates('S'.$rowIndex_sam_info); //指定位置,不合格照片
                    $drawing->setWorksheet($worksheet_sam_info);
                }
            }
            /* ---------------- 不合格照片end -------------------- */
            $worksheet_sam_info->getCell("U".$rowIndex_sam_info)->setValue(($vv->c_tool_id === 47 ? 8000 : 300)); //检测费用（元）
            $worksheet_sam_info->getCell("V".$rowIndex_sam_info)->setValue($vv->b_paid_status == 1 ? '已支付' : '未支付'); //支付状态
            $worksheet_sam_info->getCell("W".$rowIndex_sam_info)->setValue($vv->b_paid_at);  //支付时间
            $worksheet_sam_info->getCell("X".$rowIndex_sam_info)->setValue($vv->b_paid_num); //付款合同编号
            $worksheet_sam_info->getCell("Y".$rowIndex_sam_info)->setValue($vv->h_approve_end); //报告批准日期
            $worksheet_sam_info->getCell("Z".$rowIndex_sam_info)->setValue($vv->b_deadline); //要求完成日期
            $worksheet_sam_info->getCell("AA".$rowIndex_sam_info)->setValue($vv->h_sendback_end);  //报告发放日期
            $worksheet_sam_info->getCell("AB".$rowIndex_sam_info)->setValue($vv->b_client_contact); //联系人
            $worksheet_sam_info->getCell("AC".$rowIndex_sam_info)->setValue($vv->b_client_tel); //联系电话
            $worksheet_sam_info->getCell("AD".$rowIndex_sam_info)->setValue($vv->c_remark); //备注
            $rowheight = $worksheet_sam_info->getRowDimension($rowIndex_sam_info)->getRowHeight(); //行高
            
            $rowIndex_sam_info ++;
        }
        $styleArray = ['borders' => ['allBorders' => ['borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,]], 'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER, 'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER, 'wrapText' => TRUE,],];
        $worksheet_sam_info->getStyle('A1:AC'.($rowIndex_sam_info - 1))->applyFromArray($styleArray);
        //----------直接在浏览器下载----start
        $today = date('Y-m-d');
        $outname = '近半年数据，下载时间：'.$today;
        if(isset($para['searcho'])) {
            $parao = array_column($para['searcho'], 'value', 'name');
            $danwei = $parao['b_entrusted_company'] ? '检测单位：'.$parao['b_entrusted_company'].'，' : '';
            $pici = $parao['b_batchNum'] ? '批次号：'.$parao['b_batchNum'].'，' : '';
            $startdate = $parao['test_time_0'];
            $enddate = $parao['test_time_1'];
            $date = '';
            if($startdate || $enddate) {
                $date .= '日期范围：';
                $date .= $enddate ? ($startdate ? $startdate : '').'至'.$enddate : ($startdate ? $startdate.'至'.$today : '');
                $date .= ',';
            }
            $outname = $danwei.$pici.$date.'下载时间：'.$today;
        }

        $file_name = "检测台账(".$outname.").xls";  //输出的文件名称
        // header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');//告诉浏览器输出Excel 07文件
        header('Content-Type: application/vnd.ms-excel');  //告诉浏览器输出Excel 03版本文件
        header('Content-Disposition: attachment;filename='.urlencode($file_name)); //告诉浏览器输出的文件名称
        header('Cache-Control: max-age=0'); //禁止缓存
        //----------直接在浏览器下载----end

        $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xls');
        $writer->setPreCalculateFormulas(false); //禁用公式预先计算
        $writer->save('php://output');           //直接在浏览器下载
        //为了防止内存泄露，建议用完手动清理
        $spreadsheet->disconnectWorksheets();
        unset($spreadsheet);
        foreach($qr_code_path as $vv) {
            @unlink($vv);
        }
    }

}
